A compiler is a computer program or set of programs that translates one computer language (i.e., source code) into another computer language (i.e., object code or target language). Commonly, the output of the compiler has a form suitable for processing by other programs (e.g., a linker), but it may be a human readable text file.
Computer languages often contain constructs that take inputs and perform some computation based on those inputs. A common example of such a construct is a function. The type of inputs to a function is usually constrained by the language or the environment in which it is run. For example, some functions may work with scalar and matrix inputs while other functions may only work with scalar inputs.
As such, the compiler needs to know the attributes of each function argument (e.g., data type, array size, and the like) in order to compile the source code into the target language. Conventionally, declarations or assertions in the source code are used to identify the attributes of the function arguments in the source code. In this manner, by parsing the source code the compiler is able to identify the attributes of each function argument in the source code. In turn, the compiler outputs the target language.
A conventional compiler and a conventional methodology of compiling code often rely on the source code to provide the attributes of each function argument in the source code. That is, declarations and assertions in the source code determine and provide the conventional compiler with the attributes of each function argument. The source code is often partitioned, for example, into an interface and an algorithmic part. For C code, the algorithms are often specified in a .c file, whereas the interface information is often specified in an include, a .h, file. Such a collection of files is often referred to as source code. In other words, the mechanism calling the conventional compiler to compile source code into a target language does not determine the attributes of one or more function arguments expressed in the source code, rather, the source code does for the conventional compiler.